<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<link rel="stylesheet" href="../style/journal.css" type="text/css" />
<style type="text/css"><!--
.googleadsense {
	margin: 2px;
	padding: 0px;
//--></style><script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-65008-1";
urchinTracker();
</script><title>another part-time job day</title>
</head>
<body>
<a href="index.html">Journal</a>(2005) | <a href="../blog/"><b>Blog</b></a>(2006) | <a href="http://www.fayland.org/cgi-bin/random_link.pl">RandomLink</a> | <a href="AboutFayland.html">WhoAmI</a> | <a href="LiveBookmark.html">LiveBookmark</a> | <a href="http://www.fayland.org/">HomePage</a>
<p><&lt;Previous: <a href="DBIx_Class_inflate.html">DBIx::Class 的 inflate_column</a>&nbsp;&nbsp;>>Next: <a href="060225.html">job day</a></p>
<h1>another part-time job day</h1>
<div class='content'>
<p>Category: <a href='Diary.html'>Diary</a> &nbsp; Keywords: <b>part-time job</b></p>今天接了另一份 Perl 兼职在干，也是做 Web Programming. 做的是一个客户支持系统。<br />很常见的功能。客户有问题通过网页 open a ticket, 然后网站的客服人员通过回复将这个 ticket close 掉，并通过 email  通知客户。当然另外还有一些附加的功能。<br />这个系统类似 bug tracing 又类似 forum, 总体来说不算太难。所有的 Web Programming 看起来都是很类似的，无非将资料插入数据库又将资料从数据库取出来显示，或者更新或者删除。大部分工作就是这些所谓的 CRUD ( select, insert, update, delete ), 比较复杂的只是数据库的构造和资料的结构需要考虑。<br />没有使用 <a href="http://dev.catalyst.perl.org">Catalyst</a> 来做。但是用类似的概念，在 index.pl 进行了 action dispatch, 用 DBI 做 model, 用 <a href="http://www.template-toolkit.org">TT</a> 做 view.<br />用 <a href="http://search.cpan.org/perldoc?YAML">YAML</a> 来做 config 以避免 hard code. 其间将 $config 和 $query 作为 TT 的一个变量来处理。这样方便在 TT 模块中使用这些功能。大致的代码类似：<br /><pre>use vars qw/$query $dbh $tt $tt_vars $config/;<br />use FindBin;<br />my $DIR = $FindBin::Bin;<br /># config<br />$config = YAML::LoadFile("$DIR/config.yml");<br /># cgi<br />$query = new CGI;<br /># dbi<br />$dbh = DBI->connect(..<br /># template<br />$tt = Template->new({ ..<br />$tt_vars = {<br /> &nbsp; &nbsp;cgi    => $query,<br /> &nbsp; &nbsp;config => $config,<br />};</pre>增加 $tt_vars 的变量就用 $tt_vars->{message} 之类的，最后传到 $tt->process('message.tt', $tt_vars) || die $tt->error(); 就差不多了。<br />不过这样做的效果似乎不是非常理想但还可以，毕竟 YAML 和 TT 都比较庞大。Any way, 这样写起来很顺畅。<p /><h4>TT tip</h4><br />今天还碰到 TT 的变量连接。比如说 Perl 中可以这么写 $re = 'Re: ' . $title; 但是 TT 中因为 . 是用来作为 -> 使用的。所以变量连接可以这么写：<br /><pre>&lt;input type='text' name='subject' value='[% cgi.param('subject') || "Re: ${ticket.ticket_subject}" %]' lenght='12' /></pre>"Re: ${ticket.ticket_subject}"，用 ${} 来内插 TT 变量。</div>
<p><&lt;Previous: <a href="DBIx_Class_inflate.html">DBIx::Class 的 inflate_column</a>&nbsp;&nbsp;>>Next: <a href="060225.html">job day</a></p>
<p><strong>Options:</strong> <a href='http://del.icio.us/post?title=another%20part-time%20job%20day&url=http://www.fayland.org/journal/060224.html'>+Del.icio.us</a></p>
<strong>Related items</strong>
<ul><li><a href='060225.html'>job day</a> < <span class='digit'>2006-02-25 20:27:08</span> ></li></ul>
Created on <span class="digit">2006-02-24 21:12:34</span>, Last modified on <span class="digit">2006-02-24 21:15:39</span><br />
Copyright 2004-2006 All Rights Reserved. Powered by <a href="Eplanet.html">Eplanet</a> && <a href='http://catalyst.perl.org'>Catalyst</a> 5.65.
</body>
</html>